/*
 * MessageCodec.h
 * 
 * Protobuf 消息编解码器
 * 负责将 Protobuf 消息与网络字节流互相转换
 */

#pragma once

#include "PacketHeader.h"
#include <muduo/net/Buffer.h>
#include <google/protobuf/message.h>
#include <string>
#include <memory>

namespace protocol {

class MessageCodec {
public:
    // 编码：Protobuf 消息 → Buffer
    // 格式：[PacketHeader][Protobuf Data]
    static void encode(uint16_t msgId,
                      const google::protobuf::Message& message,
                      muduo::net::Buffer* buf);
    
    // 解码：Buffer → 消息ID + 数据
    // 返回值：
    //   > 0  成功解析，返回消息长度
    //   = 0  数据不完整，需要更多数据
    //   < 0  错误（包头错误、数据损坏等）
    static int decode(muduo::net::Buffer* buf, 
                     uint16_t& msgId, 
                     std::string& data);

private:
    // 检查包头
    static bool checkHeader(const PacketHeader& header);
};

} // namespace protocol

